package com.gzz.orchid.context.infrastructure.configuration;


import com.gzz.orchid.context.infrastructure.support.serial.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;

/**
 * 序列号生成器配置
 */
@Slf4j
@Configuration
public class SerialNumberConfigure {
    /**
     * 会员序号生成器
     */
    @Bean
    @ConditionalOnBean(name = "redisTemplate")
    public CustomerSerialNoGenerator customerSerialNoGenerator(RedisTemplate<String, Object> redisTemplate) {
        log.info("启用会员顺序号生成器。。。。。。。。。。。。。。。。。。。。");
        return new CustomerSerialNoGenerator(redisTemplate);
    }

    /**
     * 交易订单序号生成器
     */
    @Bean
    @ConditionalOnBean(name = "redisTemplate")
    public TradeOrderSerialNoGenerator tradeOrderSerialNoGenerator(RedisTemplate<String, Object> redisTemplate) {
        log.info("启用交易订单顺序号生成器。。。。。。。。。。。。。。。。。。。。");
        return new TradeOrderSerialNoGenerator(redisTemplate);
    }

    /**
     * 运货单序号生成器
     */
    @Bean
    @ConditionalOnBean(name = "redisTemplate")
    public ShipOrderSerialNoGenerator shipOrderSerialNoGenerator(RedisTemplate<String, Object> redisTemplate) {
        log.info("启用退货订单顺序号生成器。。。。。。。。。。。。。。。。。。。。");
        return new ShipOrderSerialNoGenerator(redisTemplate);
    }

    /**
     * 退货订单序号生成器
     */
    @Bean
    @ConditionalOnBean(name = "redisTemplate")
    public ReturnSerialNoGenerator returnSerialNoGenerator(RedisTemplate<String, Object> redisTemplate) {
        log.info("启用退货订单顺序号生成器。。。。。。。。。。。。。。。。。。。。");
        return new ReturnSerialNoGenerator(redisTemplate);
    }

    /**
     * 账户序号生成器
     */
    @Bean
    @ConditionalOnBean(name = "redisTemplate")
    public AccountSerialNoGenerator accountSerialNoGenerator(RedisTemplate<String, Object> redisTemplate) {
        log.info("启用账户顺序号生成器。。。。。。。。。。。。。。。。。。。。");
        return new AccountSerialNoGenerator(redisTemplate);
    }

    /**
     * 采购订单序号生成器
     */
    @Bean
    @ConditionalOnBean(name = "redisTemplate")
    public PurchaseSerialNoGenerator purchaseSerialNoGenerator(RedisTemplate<String, Object> redisTemplate) {
        log.info("启用采购订单顺序号生成器。。。。。。。。。。。。。。。。。。。。");
        return new PurchaseSerialNoGenerator(redisTemplate);
    }

    /**
     * 配送单序号生成器
     */
    @Bean
    @ConditionalOnBean(name = "redisTemplate")
    public DeliverySerialNoGenerator deliveryOrderSerialNoGenerator(RedisTemplate<String, Object> redisTemplate) {
        log.info("启用配送单顺序号生成器。。。。。。。。。。。。。。。。。。。。");
        return new DeliverySerialNoGenerator(redisTemplate);
    }

    /**
     * 盘点单序号生成器
     */
    @Bean
    @ConditionalOnBean(name = "redisTemplate")
    public StocktakeSerialNoGenerator stocktakeSerialNoGenerator(RedisTemplate<String, Object> redisTemplate) {
        log.info("启用盘点单顺序号生成器。。。。。。。。。。。。。。。。。。。。");
        return new StocktakeSerialNoGenerator(redisTemplate);
    }

    /**
     * 收货单序号生成器
     */
    @Bean
    @ConditionalOnBean(name = "redisTemplate")
    public ReceivedSerialNoGenerator receivedSerialNoGenerator(RedisTemplate<String, Object> redisTemplate) {
        log.info("启用收货单顺序号生成器。。。。。。。。。。。。。。。。。。。。");
        return new ReceivedSerialNoGenerator(redisTemplate);
    }

    /**
     * 报损单序号生成器
     */
    @Bean
    @ConditionalOnBean(name = "redisTemplate")
    public ScrapSerialNoGenerator scrapSerialNoGenerator(RedisTemplate<String, Object> redisTemplate) {
        log.info("启用报损单顺序号生成器。。。。。。。。。。。。。。。。。。。。");
        return new ScrapSerialNoGenerator(redisTemplate);
    }

    /**
     * 调拨单序号生成器
     */
    @Bean
    @ConditionalOnBean(name = "redisTemplate")
    public TransferSerialNoGenerator transferSerialNoGenerator(RedisTemplate<String, Object> redisTemplate) {
        log.info("启用调拨单顺序号生成器。。。。。。。。。。。。。。。。。。。。");
        return new TransferSerialNoGenerator(redisTemplate);
    }

}
